package publishSubscribe;

import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.util.ArrayList;
import java.util.List;

public class Publisher {

    private String news;

    private final List<PropertyChangeListener> subscriberList = new ArrayList<PropertyChangeListener>();

    public void doSomething(String hotNews) {
        //eine hotNews ist eben reingekommen
        //die Subscriber sollen darüber informiert werden:
        informSubscriber("news", news, hotNews);

        this.news = hotNews;
    }

    void registerSubscriber(Subscriber newSubscriber) {
        subscriberList.add(newSubscriber);
    }

    private void informSubscriber(String property, String oldValue, String newValue) {
        for (PropertyChangeListener subscriber : subscriberList) {
            subscriber.propertyChange(new PropertyChangeEvent(this, property, oldValue, newValue));
        }

        //alternativ (bzw. beim Observer-Pattern) werden die Subscriber nun nur darüber informiert, dass
        //sich irgendetwas geändert hat. Dies erfolgt durch den Aufruf einer update() Methode bei den Beobachtern.
        //Diese wiederum ruft ihrerseits eine Methode getStatus(..) beim Publisher auf, wodurch die Änderungen 
        //detailliert zurückgegeben werden können.
    }
}
